const orderModel = appRequire('models/order');
const userModel = appRequire('models/user');
const artPPTModel = appRequire('models/artPPT');

var md5 = require('md5');
module.exports = wxNotice

async function wxNotice(req, res) {
    var jsonData = req.body.xml;
    //console.log(jsonData)
    if (jsonData.result_code == 'SUCCESS') {
        var key = "xrXR1234567891234567891234567891"
        var stringA = "appid=" + jsonData.appid + "&bank_type=" + jsonData.bank_type + "&cash_fee=" + jsonData.cash_fee + "&fee_type=" + jsonData.fee_type +
            "&is_subscribe=" + jsonData.is_subscribe + "&mch_id=" + jsonData.mch_id + "&nonce_str=" + jsonData.nonce_str + "&openid=" +
            jsonData.openid + "&out_trade_no=" + jsonData.out_trade_no + "&result_code=" + jsonData.result_code + "&return_code=" +
            jsonData.return_code + "&time_end=" + jsonData.time_end + "&total_fee=" + jsonData.total_fee + "&trade_type=" +
            jsonData.trade_type + "&transaction_id=" + jsonData.transaction_id;
        var stringSignTemp = stringA + "&key=" + key;
        var sign = md5(stringSignTemp).toUpperCase();

        //验证成功
        if (sign == jsonData.sign) {
            await handleUserAndOrder(jsonData)
            var sendData = {
                return_code: 'SUCCESS',
                return_msg: 'OK'
            }
            return res.end(json2Xml(sendData));
        }
    }
}

async function handleUserAndOrder(jsonData) {
    // console.log(jsonData)
    let orderDet = await orderModel.order.findOne({
        where: {
            out_trade_no: jsonData.out_trade_no
        },
    })

    if (orderDet && orderDet.sellerId && orderDet.buyerId) {
        //改变单据状态
        await orderModel.order.update({
            status: 1
        }, {
            where: {
                objectId: orderDet.objectId,
                out_trade_no: jsonData.out_trade_no
            }
        })

        //下载数量增加
        if (orderDet.pptId) {
            await artPPTModel.increment({ downLoadNum: 1 }, {
                where: {
                    objectId: orderDet.pptId
                },
            })
        }

        let userResult = await userModel.user.findOne({
            where: {
                objectId: orderDet.sellerId
            }
        })
        userResult = Common.clone(userResult)

        let thisResult = await userModel.user.update({
            storeMoney: Number(userResult.storeMoney) + Number(jsonData.total_fee) / 100 * 0.8
        }, {
            where: {
                objectId: orderDet.sellerId
            }
        })

        return thisResult
    }
}

//json转xml
function json2Xml(json) {
    let _xml = '';
    Object.keys(json).map((key) => {
        _xml += `<${key}>${json[key]}</${key}>`
    })
    return `<xml>${_xml}</xml>`;
}